package cn.tedu.csmall.product.mapper;

import cn.tedu.csmall.product.pojo.dto.CategoryUpdateDTO;
import cn.tedu.csmall.product.pojo.entity.Category;
import cn.tedu.csmall.product.pojo.vo.CategoryListItemVO;
import cn.tedu.csmall.product.pojo.vo.CategoryStandardVO;
import org.springframework.stereotype.Repository;

import java.util.List;

@Repository
public interface CategoryMapper {
    /**
     * 插入商品分类
     * @param category      封装的商品分类信息
     * @return              受影响的行数
     */
    int insert(Category category);

    /**
     * 批量插入商品分类信息
     * @param list      商品分类集合
     * @return          受影响的行数
     */
    int insertBatch(List<Category> list);

    /**
     * 根据id删除商品分类
     * @param id  要删除的商品分类id
     * @return    返回受影响的行数
     */
    int deleteById(Long id);

    /**
     * 批量删除商品分类
     * @param ids   要删除的id数组
     * @return      受影响的行数
     */
    int deleteByIds(Long[] ids);

    /**
     * 根据id修改商品分类信息
     * @param category  封装进去的要修改的商品分类id和属性
     * @return          返回受影响的行数
     */
    int update(Category category);

    /**
     *
     * @param categoryUpdateDTO
     * @return
     */
    int updateById(CategoryUpdateDTO categoryUpdateDTO);

    /**
     * 查询商品分类总数
     * @return      返回商品分类总数
     */
    int count();

    /**
     * 通过名字统计出现的次数
     * @param name  要查询的名字
     * @return      出现的次数
     */
    int countByName(String name);

    /**
     * 通过名字统计出现的次数
     * @param parentId  要查询的父类级别ID
     * @return      出现的次数
     */
    int countByParentId(Long parentId);

    /**
     * 根据分类id查询商品分类的标准属性
     * @param id    要查询的分类id
     * @return      返回商品分类的标准属性
     */
    CategoryStandardVO getCategoryStandard(Long id);

    /**
     * 查询商品分类列表属性
     * @return  返回商品列表属性
     */
    List<CategoryListItemVO> listCategory();

    /**
     * 根据父级id查询商品分类列表属性
     * @return  返回商品列表属性
     */
    List<CategoryListItemVO> listByParentId(Long id);


}
